C++ không phải là C mở rộng C++

Trong khi nhiều mã nguồn viết trong C sẽ được dịch như là ngôn ngữ C++ mà không gặp trở ngại gì thì cũng có một số khác nhau giữa hai ngôn ngữ đã ngăn không cho C++ trở thành (ngôn ngữ) mở rộng của C. Chẳng hạn như C++ cấm gọi hàm main bên trong một chương trình, trong khi điều này hợp lệ trong C. Thêm vào đó C++ có nhiều giới hạn trong một số tính năng như là nó thiếu sự chuyển kiểu mặc định giữa các kiểu con trỏ không liên hệ nhau và cũng không cho phép một hàm được sử dụng nếu chưa khai báo.

Một vấn đè thường xảy ra khi chuyển dịch từ C sang C++ là nhiều từ khoá được thêm vào trong C++. Điều này có thể làm cho một số tên trong C trở thành bất hợp lệ trong C++. Ví dụ:

1  struct template {2      int new;3      struct template *class;4  };

hợp lệ trong C nhưng không dùng được trong C++ vì các từ khoá template, newclass.

Sự khác nhau còn xảy ra trong kiểu trình bày. Ví dụ như trong một cách cũ và truyền thống của việc khai báo trong C sau đây sẽ không được chấp thuận trong C++:

1  int subtract(minuend, subtrahend)2      int minuend;3      int subtrahend;4  {5      return minuend - subtrahend;6  }

Theo yêu cầu mới trong C++ nên viết thành:

1  int subtract(int minuend, int subtrahend)2  {3      return minuend - subtrahend;4  }

Xem thêm chi tiết trong phần quan hệ với C++ của bài ngôn ngữ C.